package leetcode101.data_structure;

import java.util.Arrays;
import java.util.Stack;

/**
 * @author Synhard
 * @version 1.0
 * @class Code8
 * @description 739. 每日温度
 * 请根据每日 气温 列表，重新生成一个列表。对应位置的输出为：要想观测到更高的气温，
 * 至少需要等待的天数。如果气温在这之后都不会升高，请在该位置用 0 来代替。
 *
 * 例如，给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]，你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
 *
 * 提示：气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度，都是在 [30, 100] 范围内的整数。
 *
 * @tel 13001321080
 * @email 823436512@qq.com
 * @date 2021-05-10 8:28
 */
public class Code8 {
    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int[] temperatures = new int[n];
//        for (int i = 0; i < n; i++) {
//            temperatures[i] = scanner.nextInt();
//        }
        int[] temperatures = new int[]{73, 74, 75, 71, 69, 72, 76, 73};
        System.out.println(Arrays.toString(dailyTemperatures(temperatures)));
    }

    public static int[] dailyTemperatures(int[] temperatures) {
        Stack<int[]> stack = new Stack<>();
        int[] res = new int[temperatures.length];
        int resIndex = 0;
        for (int i = 0; i < temperatures.length; i++) {
            if (stack.isEmpty() || temperatures[i] < stack.peek()[1]) {
                stack.push(new int[]{i, temperatures[i]});
                continue;
            }
            while (!stack.isEmpty()) {
                if (temperatures[i] > stack.peek()[1]) {
                    int[] temp = stack.pop();
                    res[temp[0]] = i - temp[0];
                } else {
                    stack.push(new int[]{i, temperatures[i]});
                    break;
                }
            }
            if (stack.isEmpty()) {
                stack.push(new int[]{i, temperatures[i]});
            }
        }
        return res;
    }
}
